home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1981 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module pois2)
-
- (DECLARE-top (SPECIAL *ARGC *COEF POISVALS POISCO1 POISCOM1 B* A* *A SS
- CC H* POISHIFT POISTSM POISSIZ POISTS $WTLVL $POISZ $POIS1)
- (*LEXPR $PRINT $COEFF)
- (GENPREFIX \P))
-
- (DEFVAR TRIM NIL)
-
- ;;(DEFUN CHECKENCODE (R) ; any relation to checkenman?
- ;; (PROG (Q)
- ;; (MAPC
- ;; #'(LAMBDA (U)
- ;; (SETQ Q ($COEFF R U))
- ;; (COND ((AND (INTEGERP Q)
- ;; (LESSP (ABS Q) POISTSM))
- ;; (SETQ R (ADD R (MUL -1 U Q))))
- ;; (T (RETURN NIL))))
- ;; '($U $V $W $X $Y $Z))
- ;; (RETURN (EQUAL R 0))))
-
- ;(DEFMFUN $POISSIMP (X)
- ; (IF (MBAGP X) (CONS (CAR X) (MAPCAR #'$POISSIMP (CDR X))) ($OUTOFPOIS X)))
-
- ;(DEFPROP MPOIS (LAMBDA (X) X) MFEXPR*)
- (defmspec mpois (x) x)
-
-
- ;(DEFMFUN $POISPLUS (A B)
- ; (SETQ A (INTOPOIS A) B (INTOPOIS B))
- ; (LIST '(MPOIS SIMP)
- ; (POISMERGE22 (CADR A) (CADR B))
- ; (POISMERGE22 (CADDR A) (CADDR B))))
-
- (declare-top (SPECIAL *B *FN))
- ;(DEFMFUN $POISMAP (P SINFN COSFN)
- ; (PROG (*B *FN)
- ; (SETQ P (INTOPOIS P))
- ; (SETQ *FN (LIST SINFN))
- ; (RETURN (LIST (CAR P) (POISMAP (CADR P))
- ; (PROG2 (SETQ *FN (LIST COSFN))
- ; (POISMAP (CADDR P)))))))
-
- ;(DEFUN POISMAP (Y)
- ; (COND ((NULL Y) NIL)
- ; (T (SETQ *B (MEVAL (LIST *FN
- ; (POISCDECODE (CADR Y))
- ; (POISDECODEC (CAR Y)))))
- ; (TCONS3 (CAR Y) (INTOPOISCO *B) (POISMAP (CDDR Y))))))
-
- ;(DEFUN POISMERGE22 (R S)
- ; (COND ((NULL R) S)
- ; ((NULL S) R)
- ; ((EQUAL (CAR R) (CAR S))
- ; (PROG (TT)
- ; (SETQ TT (POISCO+ (CADR R) (CADR S)))
- ; (RETURN (COND ((POISPZERO TT) (POISMERGE22 (CDDR R) (CDDR S)))
- ; (T (CONS (CAR S)
- ; (CONS TT (POISMERGE22 (CDDR R) (CDDR S)))))))))
- ; ((LESSP (CAR R) (CAR S))
- ; (CONS (CAR R) (CONS (CADR R) (POISMERGE22 (CDDR R) S))))
- ; (T (CONS (CAR S) (CONS (CADR S) (POISMERGE22 (CDDR S) R))))))
-
- ;(DEFUN POISCOSINE (M)
- ; (SETQ M (POISENCODE M))
- ; (COND ((POISNEGPRED M) (SETQ M (POISCHANGESIGN M))))
- ; (LIST '(MPOIS SIMP) NIL (LIST M POISCO1)))
-
- ;(DEFUN POISSINE (M)
- ; (SETQ M (POISENCODE M))
- ; (COND ((POISNEGPRED M) (LIST '(MPOIS SIMP)
- ; (LIST (POISCHANGESIGN M) POISCOM1)
- ; NIL))
- ; (T (LIST '(MPOIS SIMP)
- ; (LIST M POISCO1)
- ; NIL))))
-
- ;(DEFMFUN $INTOPOIS (X)
- ; (PROG (*A) (RETURN (INTOPOIS X))))
-
- ;(DEFUN INTOPOIS (A)
- ; (COND ((ATOM A) (COND ((EQUAL A 0) $POISZ)
- ; (T (LIST '(MPOIS SIMP) NIL (LIST POISHIFT (INTOPOISCO A))))))
- ; ((EQ (CAAR A) 'MPOIS) A)
- ; ((EQ (CAAR A) '%SIN) (POISSINE (CADR A)))
- ; ((EQ (CAAR A) '%COS) (POISCOSINE (CADR A)))
- ; ((AND (EQ (CAAR A) 'MEXPT)
- ; (NUMBERP (CADDR A))
- ; (GREATERP (CADDR A) 0))
- ; ($POISEXPT (INTOPOIS (CADR A)) (CADDR A)))
- ; ((EQ (CAAR A) 'MPLUS)
- ; (SETQ *A (INTOPOIS (CADR A)))
- ; (MAPC (FUNCTION
- ; (LAMBDA (Z) (SETQ *A ($POISPLUS *A (INTOPOIS Z)))))
- ; (CDDR A))
- ; *A)
- ; ((EQ (CAAR A) 'MTIMES)
- ; (SETQ *A (INTOPOIS (CADR A)))
- ; (MAPC (FUNCTION
- ; (LAMBDA (Z) (SETQ *A ($POISTIMES *A (INTOPOIS Z)))))
- ; (CDDR A))
- ; *A)
- ; ((EQ (CAAR A) 'MRAT)
- ; (INTOPOIS (RATDISREP A)))
- ; (T (LIST '(MPOIS SIMP) NIL (LIST POISHIFT (INTOPOISCO A))))))
-
- ;(DEFUN TCONS (R S)
- ; (COND ((POISPZERO (CAR S)) (CDR S))
- ; (T (CONS R S))))
-
- ;(DEFUN POISNEGPRED ($N)
- ; (PROG ($R)
- ; $LOOP (COND ((EQUAL $N 0) (RETURN NIL))
- ; (T NIL))
- ; (SETQ $R (DIFFERENCE (REMAINDER $N POISTS) POISTSM))
- ; (COND ((GREATERP $R 0) (RETURN NIL))
- ; ((GREATERP 0 $R) (RETURN T))
- ; (T (SETQ $N (QUOTIENT $N POISTS))))
- ; (GO $LOOP)))
-
- ;(DEFUN POISCHANGESIGN ($N)
- ; (DIFFERENCE (TIMES POISHIFT 2) $N))
-
- ;(DEFUN POISENCODE (H*)
- ; (COND ((NOT (CHECKENCODE H*))
- ; (merror "Illegal arg to POISSIMP:~%~M" H*)))
- ; (APPLY (FUNCTION (LAMBDA ($Z $Y $X $W $V $U)
- ; (DECLARE (SPECIAL $U $V $W $X $Y $Z))
- ; (SETQ H* (MEVAL H*))
- ; (COND ((NOT (INTEGERP H*))
- ; (merror "Illegal trig arg to POISSON form")))
- ; (PLUS POISHIFT H*)))
- ; POISVALS))
-
- (DEFUN POISLIM1 (U N)
- U ;Ignored
- (COND ((NOT (fixnump N))
- (merror "Improper argument to POISLIM:~%~M" N)))
- (SETQ POISVALS NIL)
- (SETQ POISTS #+NIL (ash 1 n) #-NIL (EXPT 2 N))
- (DO ((J 0 (f1+ J))) ((> J 5))
- (SETQ POISVALS (CONS (EXPT POISTS J) POISVALS)))
- (SETQ POISSIZ N
- POISTSM (EXPT 2 (SUB1 N))
- POISHIFT (PROG (SUM)
- (SETQ SUM 0)
- (DO ((I 0 (f1+ I))) ((> I 5))
- (SETQ SUM (PLUS SUM (TIMES POISTSM (EXPT POISTS I)))))
- (RETURN SUM))
- $POISZ '((MPOIS SIMP) NIL NIL)
- $POIS1 (LIST '(MPOIS SIMP) NIL (LIST POISHIFT 1)))
- N)
-
- ;(DEFUN POISDECODEC (M &AUX ARG H)
- ; (SETQ ARG 0)
- ; (SETQ H M)
- ; (MAPC
- ; #'(LAMBDA (V)
- ; (SETQ ARG (ADD ARG (MUL (DIFFERENCE (REMAINDER H POISTS) POISTSM)
- ; V)))
- ; (SETQ H (QUOTIENT H POISTS)))
- ; '($U $V $W $X $Y $Z))
- ; ARG)
-
- ;(DEFMFUN $POISCTIMES (C P)
- ; (LIST '(MPOIS SIMP)
- ; (POISCTIMES1 (SETQ C (INTOPOISCO C))
- ; (CADR P))
- ; (POISCTIMES1 C (CADDR P))))
-
- ;(DEFMFUN $OUTOFPOIS (P)
- ; (PROG (ANS)
- ; (COND ((OR (ATOM P) (NOT (EQ (CAAR P) 'MPOIS)))
- ; (SETQ P (INTOPOIS P))))
- ; (DO M (CADR P) (CDDR M) (NULL M)
- ; (SETQ ANS (CONS (LIST '(MTIMES) (POISCDECODE (CADR M))
- ; (LIST '(%SIN) (POISDECODEC (CAR M))))
- ; ANS)))
- ; (DO M (CADDR P) (CDDR M) (NULL M)
- ; (SETQ ANS (CONS (LIST '(MTIMES) (POISCDECODE (CADR M))
- ; (COND ((EQUAL (CAR M) POISHIFT) 1)
- ; (T (LIST '(%COS) (POISDECODEC (CAR M))))))
- ; ANS)))
- ; (RETURN (COND ((NULL ANS) 0)
- ; (T (SIMPLIFYA (CONS '(MPLUS) ANS) NIL))))))
-
- ;(DEFMFUN $PRINTPOIS (P)
- ; (PROG ()
- ; (SETQ P (INTOPOIS P))
- ; (DO M (CADR P) (CDDR M) (NULL M)
- ; (DISPLA (SIMPLIFYA (LIST '(MTIMES) (POISCDECODE (CADR M))
- ; (LIST '(%SIN) (POISDECODEC (CAR M))))
- ; T))
- ; (TERPRI))
- ; (DO M (CADDR P) (CDDR M) (NULL M)
- ; (DISPLA (SIMPLIFYA (LIST '(MTIMES) (POISCDECODE (CADR M))
- ; (COND ((EQUAL (CAR M) POISHIFT) 1)
- ; (T (LIST '(%COS) (POISDECODEC (CAR M))))))
- ; T))
- ; (TERPRI))
- ; (RETURN '$DONE)))
-
- ;(DEFMFUN $POISDIFF (P M)
- ; (DECLARE (SPECIAL M))
- ; (COND ((MEMQ M '($U $V $W $X $Y $Z))
- ; (LIST (CAR P)
- ; (COSDIF (CADDR P) M)
- ; (SINDIF (CADR P) M)))
- ; (T (LIST (CAR P)
- ; (POISDIF4 (CADR P))
- ; (POISDIF4 (CADDR P))))))
-
- ;(DEFUN POISDIF4 (Y)
- ; (declare (special m))
- ; (COND ((NULL Y) NIL)
- ; (T (TCONS3 (CAR Y)
- ; (POISCODIF (CADR Y) M)
- ; (POISDIF4 (CDDR Y))))))
-
- ;(DEFUN COSDIF (H M)
- ; (COND ((NULL H) NIL)
- ; (T (TCONS (CAR H)
- ; (CONS (POISCO* (INTOPOISCO (MINUS (POISXCOEF (CAR H) M))) (CADR H))
- ; (COSDIF (CDDR H) M))))))
-
- ;(DEFUN SINDIF (H M)
- ; (COND ((NULL H) NIL)
- ; (T (TCONS (CAR H)
- ; (CONS (POISCO* (INTOPOISCO (POISXCOEF (CAR H) M)) (CADR H))
- ; (SINDIF (CDDR H) M))))))
-
- ;(DEFUN POISXCOEF (H M)
- ; (DIFFERENCE
- ; (REMAINDER (QUOTIENT H (EXPT POISTS
- ; (CADR (MEMQ M '($U 0 $V 1 $W 2 $X 3 $Y 4 $Z 5)))))
- ; POISTS)
- ; POISTSM))
-
- (DEFUN NONPERIOD (P)
- (AND (NULL (CADR P))
- (EQUAL (CAADDR P) POISHIFT)
- (NULL (CDDR (CADDR P)))))
-
- (DECLARE-top (SPECIAL ANS))
-
- ;(MACRO KEY (L) (CONS 'CAR (CDR L)))
-
- ;(MACRO LLINK (L) (CONS 'CAADR (CDR L)))
-
- ;(MACRO RLINK (L) (CONS 'CDADR (CDR L)))
-
- ;(MACRO BP (L) (CONS 'CADDR (CDR L)))
-
- ;(MACRO REC (L) (CONS 'CDDDR (CDR L)))
-
- ;(MACRO ORDER< (L) (CONS 'LESSP (CDR L)))
-
- ;(MACRO ORDER= (L) (CONS 'EQUAL (CDR L)))
-
- ;(MACRO SETRLINK (L) (LIST 'RPLACD (LIST 'CADR (CADR L)) (CADDR L)))
-
- ;(MACRO SETLLINK (L) (LIST 'RPLACA (LIST 'CADR (CADR L)) (CADDR L)))
-
- ;(MACRO SETBP (L) (LIST 'RPLACA (LIST 'CDDR (CADR L)) (CADDR L)))
-
- ;(MACRO SETREC (L) (LIST 'RPLACD (LIST 'CDDR (CADR L)) (CADDR L)))
-
- ;(DEFUN INSERT-IT (PP NEWREC) (SETREC PP (POISCO+ (REC PP) NEWREC)))
-
- ;(DEFUN AVLINSERT (K NEWREC HEAD)
- ; (PROG (QQ TT SS PP RR)
- ; (SETQ TT HEAD)
- ; (SETQ SS (SETQ PP (RLINK HEAD)))
- ; A2 (COND ((ORDER< K (KEY PP)) (GO A3))
- ; ((ORDER< (KEY PP) K) (GO A4))
- ; (T (INSERT-IT PP NEWREC) (RETURN HEAD)))
- ; A3 (SETQ QQ (LLINK PP))
- ; (COND ((NULL QQ)
- ; (SETLLINK PP (CONS K (CONS (NCONS NIL) (CONS 0 NEWREC))))
- ; (GO A6))
- ; ((ORDER= 0 (BP QQ)) NIL)
- ; (T (SETQ TT PP SS QQ)))
- ; (SETQ PP QQ)
- ; (GO A2)
- ; A4 (SETQ QQ (RLINK PP))
- ; (COND ((NULL QQ)
- ; (SETRLINK PP (CONS K (CONS (NCONS NIL) (CONS 0 NEWREC))))
- ; (GO A6))
- ; ((ORDER= 0 (BP QQ)) NIL)
- ; (T (SETQ TT PP SS QQ)))
- ; (SETQ PP QQ)
- ; (GO A2)
- ; A6 (COND ((ORDER< K (KEY SS)) (SETQ RR (SETQ PP (LLINK SS))))
- ; (T (SETQ RR (SETQ PP (RLINK SS)))))
- ; A6LOOP
- ; (COND ((ORDER< K (KEY PP)) (SETBP PP -1) (SETQ PP (LLINK PP)))
- ; ((ORDER< (KEY PP) K) (SETBP PP 1) (SETQ PP (RLINK PP)))
- ; ((ORDER= K (KEY PP)) (GO A7)))
- ; (GO A6LOOP)
- ; A7 (COND ((ORDER< K (KEY SS)) (GO A7L)) (T (GO A7R)))
- ; A7L (COND ((ORDER= 0 (BP SS)) (SETBP SS -1) (SETLLINK HEAD (f1+ (LLINK HEAD))) (RETURN HEAD))
- ; ((ORDER= (BP SS) 1) (SETBP SS 0) (RETURN HEAD)))
- ; (COND ((ORDER= (BP RR) -1) NIL)
- ; (T (GO A9L)))
- ; (SETQ PP RR)
- ; (SETLLINK SS (RLINK RR))
- ; (SETRLINK RR SS)
- ; (SETBP SS 0)
- ; (SETBP RR 0)
- ; (GO A10)
- ; A9L (SETQ PP (RLINK RR))
- ; (SETRLINK RR (LLINK PP))
- ; (SETLLINK PP RR)
- ; (SETLLINK SS (RLINK PP))
- ; (SETRLINK PP SS)
- ; (COND ((ORDER= (BP PP) -1) (SETBP SS 1) (SETBP RR 0))
- ; ((ORDER= (BP PP) 0) (SETBP SS 0) (SETBP RR 0))
- ; ((ORDER= (BP PP) 1) (SETBP SS 0) (SETBP RR -1)))
- ; (SETBP PP 0)
- ; (GO A10)
- ; A7R (COND ((ORDER= 0 (BP SS)) (SETBP SS 1) (SETLLINK HEAD (f1+ (LLINK HEAD))) (RETURN HEAD))
- ; ((ORDER= (BP SS) -1) (SETBP SS 0) (RETURN HEAD)))
- ; (COND ((ORDER= (BP RR) 1) NIL)
- ; (T (GO A9R)))
- ; (SETQ PP RR)
- ; (SETRLINK SS (LLINK RR))
- ; (SETLLINK RR SS)
- ; (SETBP SS 0)
- ; (SETBP RR 0)
- ; (GO A10)
- ; A9R (SETQ PP (LLINK RR))
- ; (SETLLINK RR (RLINK PP))
- ; (SETRLINK PP RR)
- ; (SETRLINK SS (LLINK PP))
- ; (SETLLINK PP SS)
- ; (COND ((ORDER= (BP PP) 1) (SETBP SS -1) (SETBP RR 0))
- ; ((ORDER= (BP PP) 0) (SETBP SS 0) (SETBP RR 0))
- ; ((ORDER= (BP PP) -1) (SETBP SS 0) (SETBP RR 1)))
- ; (SETBP PP 0)
- ; A10 (COND ((EQ SS (RLINK TT)) (SETRLINK TT PP))
- ; (T (SETLLINK TT PP)))
- ; (RETURN HEAD)))
-
- ;(DEFUN AVLINIT (KEY REC)
- ; (CONS 'TOP (CONS (CONS 0 (CONS KEY (CONS (NCONS NIL) (CONS 0 REC))))
- ; (CONS 0 NIL))))
-
- ;(DEFUN UNTREE (H)
- ; (PROG (ANS)
- ; (UNTREE1 (RLINK H))
- ; (RETURN ANS)))
-
- ;(DEFUN UNTREE1 (H)
- ; (COND ((NULL H) ANS)
- ; ((NULL (RLINK H))
- ; (SETQ ANS (TCONS3 (KEY H) (REC H) ANS))
- ; (UNTREE1 (LLINK H)))
- ; (T (SETQ ANS (TCONS3 (KEY H) (REC H) (UNTREE1 (RLINK H))))
- ; (UNTREE1 (LLINK H)))))
-
- ;(DEFUN TCONS3 (R S TT)
- ; (COND ((POISPZERO S) TT)
- ; (T (CONS R (CONS S TT)))))
-
- ;(DEFUN POISMERGES (A AE L)
- ; (COND ((EQUAL POISHIFT AE) L)
- ; ((POISNEGPRED AE) (POISMERGE (POISCO* POISCOM1 A)
- ; (POISCHANGESIGN AE) L))
- ; (T (POISMERGE A AE L))))
-
- ;(DEFUN POISMERGEC (A AE L)
- ; (COND ((POISNEGPRED AE) (POISMERGE A (POISCHANGESIGN AE) L))
- ; (T (POISMERGE A AE L))))
-
- ;(DEFUN POISMERGE (A AE L)
- ; (COND ((POISPZERO A) NIL)
- ; (T (MERGE11 A AE L))))
-
- ;(DEFUN POISMERGE2 (R S)
- ; (COND ((NULL R) S)
- ; ((NULL S) R)
- ; (T (PROG (M N TT)
- ; (SETQ M (SETQ N (CONS 0 R)))
- ; A (COND ((NULL R) (RPLACD M S) (RETURN (CDR N)))
- ; ((NULL S) (RETURN (CDR N)))
- ; ((EQUAL (CAR R) (CAR S))
- ; (SETQ TT (POISCO+ (CADR R) (CADR S)))
- ; (COND ((POISPZERO TT)
- ; (RPLACD M (CDDR R))
- ; (SETQ R (CDDR R) S (CDDR S)))
- ; (T (RPLACA (CDR R) TT)
- ; (SETQ S (CDDR S) R (CDDR R) M (CDDR M)))))
- ; ((GREATERP (CAR R) (CAR S))
- ; (RPLACD M S)
- ; (SETQ S (CDDR S))
- ; (RPLACD (CDDR M) R)
- ; (SETQ M (CDDR M)))
- ; (T (SETQ R (CDDR R))
- ; (SETQ M (CDDR M))))
- ; (GO A)))))
-
- ;(DEFUN MERGE11 (A AE L)
- ; (POISMERGE2 (LIST AE A) L))
-
- ;(DEFUN POISMERGESX (A AE L)
- ; (COND ((EQUAL POISHIFT AE) L)
- ; ((POISNEGPRED AE)
- ; (AVLINSERT (POISCHANGESIGN AE)
- ; (POISCO* POISCOM1 A)
- ; L))
- ; (T (AVLINSERT AE A L))))
-
- ;(DEFUN POISMERGECX (A AE L)
- ; (COND ((POISNEGPRED AE)
- ; (AVLINSERT (POISCHANGESIGN AE) A L))
- ; (T (AVLINSERT AE A L))))
-
- (DECLARE-TOP (SPECIAL TRIM POISCOM1 POISHIFT))
- ;(DEFUN POISCTIMES1 (C H)
- ; (COND ((NULL H) NIL)
- ; ((AND TRIM (TRIMF (CAR H))) (POISCTIMES1 C (CDDR H)))
- ; (T (TCONS (CAR H)
- ; (CONS (POISCO* C (CADR H))
- ; (POISCTIMES1 C (CDDR H)))))))
-
- ;(DEFUN TRIMF (M)
- ; (MEVAL (LIST '($POISTRIM) (POISXCOEF M '$U) (POISXCOEF M '$V)
- ; (POISXCOEF M '$W) (POISXCOEF M '$X) (POISXCOEF M '$Y) (POISXCOEF M '$Z))))
-
- ;(DEFMFUN $POISTIMES (A B)
- ; (PROG (SLC CLC TEMP AE AA ZERO TRIM T1 T2 F1 F2)
- ; (SETQ A (INTOPOIS A) B (INTOPOIS B))
- ; (COND ((OR (GETL '$POISTRIM '(EXPR SUBR)) (MGET '$POISTRIM 'MEXPR))
- ; (SETQ TRIM T)))
- ; (COND ((NONPERIOD A) (RETURN ($POISCTIMES (CADR (CADDR A)) B)))
- ; ((NONPERIOD B) (RETURN ($POISCTIMES (CADR (CADDR B)) A))))
- ; (SETQ SLC (AVLINIT POISHIFT (SETQ ZERO (INTOPOISCO 0.))))
- ; (SETQ CLC (AVLINIT POISHIFT ZERO))
- ; ;; PROCEED THROUGH ALL THE SINES IN ARGUMENT A
- ; (DO SLA
- ; (CADR A)
- ; (CDDR SLA)
- ; (NULL SLA)
- ; (SETQ AA (HALVE (CADR SLA)) AE (CAR SLA))
- ; ;; SINE(U)*SINE(V) ==> (-COSINE(U+V) + COSINE(U-V))/2
- ; (DO SLB
- ; (CADR B)
- ; (CDDR SLB)
- ; (NULL SLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR SLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR SLB)))
- ; (COND (TRIM (SETQ F1 (TRIMF T1) F2 (TRIMF T2)))
- ; (T (SETQ F1 NIL F2 NIL)))
- ; (SETQ TEMP (POISCO* AA (CADR SLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGECX TEMP T1 CLC))
- ; (OR F2 (POISMERGECX (POISCO* POISCOM1 TEMP) T2 CLC)))))
- ; ;; SINE*COSINE ==> SINE + SINE
- ; (DO CLB
- ; (CADDR B)
- ; (CDDR CLB)
- ; (NULL CLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR CLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR CLB)))
- ; (COND (TRIM (SETQ F1 (TRIMF T1) F2 (TRIMF T2)))
- ; (T (SETQ F1 NIL F2 NIL)))
- ; (SETQ TEMP (POISCO* AA (CADR CLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGESX TEMP T1 SLC))
- ; (OR F2 (POISMERGESX TEMP T2 SLC))))))
- ; ;; PROCEED THROUGH ALL THE COSINES IN ARGUMENT A
- ; (DO CLA
- ; (CADDR A)
- ; (CDDR CLA)
- ; (NULL CLA)
- ; (SETQ AA (HALVE (CADR CLA)) AE (CAR CLA))
- ; ;; COSINE*SINE ==> SINE - SINE
- ; (DO SLB
- ; (CADR B)
- ; (CDDR SLB)
- ; (NULL SLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR SLB))))
- ; (SETQ T2 (PLUS AE (MINUS POISHIFT) (CAR SLB)))
- ; (COND (TRIM (SETQ F1 (TRIMF T1) F2 (TRIMF T2)))
- ; (T (SETQ F1 NIL F2 NIL)))
- ; (SETQ TEMP (POISCO* AA (CADR SLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGESX (POISCO* POISCOM1 TEMP) T1 SLC))
- ; (OR F2 (POISMERGESX TEMP T2 SLC)))))
- ; ;; COSINE*COSINE ==> COSINE + COSINE
- ; (DO CLB
- ; (CADDR B)
- ; (CDDR CLB)
- ; (NULL CLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR CLB))))
- ; (SETQ T2 (PLUS AE (MINUS POISHIFT) (CAR CLB)))
- ; (COND (TRIM (SETQ F1 (TRIMF T1) F2 (TRIMF T2)))
- ; (T (SETQ F1 NIL F2 NIL)))
- ; (SETQ TEMP (POISCO* AA (CADR CLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGECX TEMP T1 CLC))
- ; (OR F2 (POISMERGECX TEMP T2 CLC))))))
- ; (RETURN (LIST '(MPOIS SIMP) (UNTREE SLC) (UNTREE CLC)))))
-
- ;(DEFMFUN $POISEXPT (P N)
- ; (PROG (U H)
- ; (COND ((ODDP N) (SETQ U P)) (T (SETQ U (SETQ H (INTOPOIS 1.)))))
- ; A (SETQ N (LSH N -1.))
- ; (COND ((ZEROP N) (RETURN U)))
- ; (setq p ($POISTIMES P P))
- ; (COND ((ODDP N) (SETQ U (COND ((EQUAL U H) P) (T ($POISTIMES U P))))))
- ; (GO A)))
-
- ;(DEFMFUN $POISSQUARE (A) ($POISEXPT A 2))
-
- ;(DEFMFUN $POISINT (P M)
- ; (DECLARE (SPECIAL M))
- ; (PROG (B*)
- ; (SETQ P (INTOPOIS P))
- ; (COND ((MEMQ M '($U $V $W $X $Y $Z))
- ; (RETURN (LIST (CAR P) (COSINT* (CADDR P) M) (SININT* (CADR P) M))))
- ; (T (RETURN (LIST (CAR P) (POISINT4 (CADR P)) (POISINT4 (CADDR P))))))))
-
- ;(DEFUN POISINT4 (Y)
- ; (DECLARE (SPECIAL M))
- ; (COND ((NULL Y) NIL)
- ; (T (TCONS3 (CAR Y)
- ; (POISCOINTEG (CADR Y) M)
- ; (POISINT4 (CDDR Y))))))
-
- ;(DEFUN COSINT* (H M)
- ; (COND ((NULL H) NIL)
- ; ((EQUAL 0 (SETQ B* (POISXCOEF (CAR H) M)))
- ; (COSINT* (CDDR H) M))
- ; (T (TCONS (CAR H)
- ; (CONS (POISCO* (INTOPOISCO (LIST '(MEXPT) B* -1)) (CADR H))
- ; (COSINT* (CDDR H) M))))))
-
- ;(DEFUN SININT* (H M)
- ; (COND ((NULL H) NIL)
- ; ((EQUAL 0 (SETQ B* (POISXCOEF (CAR H) M)))
- ; (SININT* (CDDR H) M))
- ; (T (TCONS (CAR H)
- ; (CONS (POISCO* (INTOPOISCO (LIST '(MEXPT) (MINUS (POISXCOEF (CAR H) M)) -1))
- ; (CADR H))
- ; (SININT* (CDDR H) M))))))
-
- ;(DEFUN POISSUBSTA (A B* C)
- ; (PROG (SS CC)
- ; (SETQ H* (DIFFERENCE (POISENCODE (LIST '(MPLUS) A (LIST '(MTIMES) -1 B*))) POISHIFT))
- ; (POISSUBST1S (CADR C))
- ; (POISSUBST1C (CADDR C))
- ; (RETURN (LIST (CAR C) SS CC))))
-
- ;(DEFUN POISSUBST1S (C)
- ; (COND ((NULL C) NIL)
- ; (T (SETQ SS (POISMERGES (CADR C) (ARGSUBST (CAR C)) SS))
- ; (POISSUBST1S (CDDR C)))))
-
- ;(DEFUN POISSUBST1C (C)
- ; (COND ((NULL C) NIL)
- ; (T (SETQ CC (POISMERGEC (CADR C) (ARGSUBST (CAR C)) CC))
- ; (POISSUBST1C (CDDR C)))))
-
- ;(DEFUN ARGSUBST (C)
- ; (PLUS C (TIMES H* (POISXCOEF C B*))))
-
- ;(DEFMFUN $POISSUBST N
- ; (COND ((NOT (OR (EQUAL N 3) (EQUAL N 5)))
- ; (merror "WRONG NUMBER OF ARGS TO POISSUBST"))
- ; ((EQUAL N 5)
- ; (FANCYPOISSUBST (ARG 1) (ARG 2) (INTOPOIS (ARG 3)) (INTOPOIS (ARG 4)) (ARG 5)))
- ; (T ((LAMBDA (A* B* C)
- ; (COND ((MEMQ B* '($U $V $W $X $Y $Z)) (POISSUBSTA A* B* C))
- ; (T (LIST (CAR C) (POISSUBSTCO1 (CADR C)) (POISSUBSTCO1 (CADDR C))))))
- ; (ARG 1) (ARG 2) (INTOPOIS (ARG 3))))))
-
- ;(DEFUN POISSUBSTCO1 (C)
- ; (COND ((NULL C) NIL)
- ; (T (TCONS (CAR C)
- ; (CONS (POISSUBSTCO A* B* (CADR C))
- ; (POISSUBSTCO1 (CDDR C)))))))
-
- (DECLARE-TOP (SPECIAL DC DS *ANS))
- ;(DEFUN FANCYPOISSUBST (A B* C D N)
- ; (PROG (H* DC DS *ANS)
- ; (SETQ *ANS (LIST '(MPOIS SIMP) NIL NIL)
- ; D (INTOPOIS D)
- ; DC (INTOPOIS 1)
- ; DS (INTOPOIS 0))
- ; (COND ((EQUAL N 0) (RETURN ($POISSUBST A B* C))))
- ; (FANCYPOIS1S D 1 1 N)
- ; (SETQ H* (DIFFERENCE (POISENCODE (LIST '(MPLUS) A (LIST '(MTIMES) -1 B*))) POISHIFT))
- ; (FANCYPAS (CADR C))
- ; (FANCYPAC (CADDR C))
- ; (RETURN *ANS)))
-
- ;(DEFUN FANCYPOIS1S (D DP N LIM)
- ; (COND ((GREATERP N LIM) NIL)
- ; (T (SETQ DS ($POISPLUS DS
- ; ($POISCTIMES (LIST '(RAT)
- ; (EXPT -1 (QUOTIENT (SUB1 N) 2))
- ; (FACTORIAL N))
- ; (SETQ DP ($POISTIMES DP D)))))
- ; (FANCYPOIS1C D DP (f1+ N) LIM))))
-
- ;(DEFUN FANCYPOIS1C (D DP N LIM)
- ; (COND ((GREATERP N LIM) NIL)
- ; (T (SETQ DC ($POISPLUS DC
- ; ($POISCTIMES (LIST '(RAT)
- ; (EXPT -1 (QUOTIENT N 2))
- ; (FACTORIAL N))
- ; (SETQ DP ($POISTIMES DP D)))))
- ; (FANCYPOIS1S D DP (f1+ N) LIM))))
-
- (DECLARE-TOP (SPECIAL *ARGC *COEF))
- ;(DEFUN FANCYPAC (C)
- ; (PROG ()
- ; (COND ((NULL C) (RETURN NIL)))
- ; (SETQ *COEF (POISXCOEF (CAR C) B*))
- ; (COND ((EQUAL *COEF 0)
- ; (SETQ *ANS ($POISPLUS *ANS (LIST '(MPOIS SIMP) NIL (LIST (CAR C) (CADR C)))))
- ; (GO END)))
- ; (COND ((POISPZERO (SETQ *COEF (POISCO* (CADR C) (INTOPOISCO *COEF)))) (GO END)))
- ; (SETQ *ARGC (ARGSUBST (CAR C)))
- ; (SETQ *ANS ($POISPLUS *ANS
- ; ($POISPLUS ($POISTIMES (LIST '(MPOIS SIMP)
- ; NIL
- ; (POISMERGEC *COEF *ARGC NIL))
- ; DC)
- ; ($POISTIMES (LIST '(MPOIS SIMP)
- ; (POISMERGES (POISCO* POISCOM1 *COEF)
- ; *ARGC
- ; NIL)
- ; NIL)
- ; DS))))
- ; END (FANCYPAC (CDDR C))))
-
- ;(DEFUN FANCYPAS (C)
- ; (PROG ()
- ; (COND ((NULL C) (RETURN NIL)))
- ; (SETQ *COEF (POISXCOEF (CAR C) B*))
- ; (COND ((EQUAL *COEF 0)
- ; (SETQ *ANS ($POISPLUS *ANS (LIST '(MPOIS SIMP) (LIST (CAR C) (CADR C)) NIL)))
- ; (GO END)))
- ; (COND ((POISPZERO (SETQ *COEF (POISCO* (CADR C) (INTOPOISCO *COEF))))
- ; (GO END)))
- ; (SETQ *ARGC (ARGSUBST (CAR C)))
- ; (SETQ *ANS ($POISPLUS *ANS
- ; ($POISPLUS ($POISTIMES (LIST '(MPOIS SIMP)
- ; NIL
- ; (POISMERGEC *COEF *ARGC NIL))
- ; DS)
- ; ($POISTIMES (LIST '(MPOIS SIMP)
- ; (POISMERGES *COEF *ARGC NIL)
- ; NIL)
- ; DC))))
- ; END (FANCYPAS (CDDR C))))
-
- ;; On the VAX, this should be smaller than on the 10.
-
- (POISLIM1 NIL #-Franz 5 #+Franz 4)
-
- ;(DEFUN POISCDECODE (X) X)
-
- ;(DEFUN INTOPOISCO (X) (SIMPLIFYA X NIL))
-
- ;(DEFUN POISCO+ (R S) (SIMPLIFYA (LIST '(MPLUS) R S) NIL))
-
- ;(DEFUN POISCO* (R S) (SIMPLIFYA (LIST '(MTIMES) R S) NIL))
-
- ;(DEFUN HALVE (R) (SIMPLIFYA (LIST '(MTIMES) '((RAT) 1 2) R) NIL))
-
- ;(DEFUN POISSUBSTCO (A B C) (MAXIMA-SUBSTITUTE A B C))
-
- ;(DEFUN POISCODIF (H VAR) ($DIFF H VAR))
-
- ;(DEFUN POISCOINTEG (H VAR) (INTOPOISCO ($INTEGRATE (POISCDECODE H) VAR)))
-
- ;(DEFUN POISPZERO (X) (ZEROP1 X))
-
- (SETQ POISCO1 1 POISCOM1 -1)
-
- ;(COMMENT
-
- ; (DECLARE-TOP (SPECIAL SLCX CLCX LASTPTR TRIM POISCOM1 POISHIFT CLC SLC CLCPTR SLCPTR))
-
- ; (DEFUN POISMERGE2K (S R)
- ; (COND ((NULL R) (SETQ LASTPTR S))
- ; ((NULL S) (SETQ LASTPTR R))
- ; (T (PROG (M N TT)
- ; (SETQ M (SETQ N (CONS 0 R)))
- ; A (COND ((NULL R) (RPLACD M S) (SETQ LASTPTR S) (RETURN (CDR N)))
- ; ((NULL S) (SETQ LASTPTR R) (RETURN (CDR N)))
- ; ((EQUAL (CAR R) (CAR S))
- ; (SETQ TT (POISCO+ (CADR R) (CADR S)))
- ; (COND ((POISPZERO TT) (RPLACD M (CDDR R))
- ; (SETQ R (CDDR R) S (CDDR S)))
- ; (T (RPLACA (CDR R) TT)
- ; (SETQ S (CDDR S) R (CDDR R) M (CDDR M)))))
- ; ((GREATERP (CAR R) (CAR S))
- ; (RPLACD M S) (SETQ S (CDDR S))
- ; (RPLACD (CDDR M) R) (SETQ M (CDDR M)))
- ; (T (SETQ R (CDDR R)) (SETQ M (CDDR M))))
- ; (GO A)))))
-
- ; (DEFUN POISMERGESQ (A AE L)
- ; (SETQ SLCX
- ; (COND ((EQUAL POISHIFT AE) L)
- ; ((POISNEGPRED AE) (POISMERGE (POISCO* POISCOM1 A) (POISCHANGESIGN AE) L))
- ; (T (POISMERGE A AE L)))))
-
- ; (DEFUN POISMERGECQ (A AE L)
- ; (SETQ CLCX (COND ((POISNEGPRED AE) (POISMERGE A (POISCHANGESIGN AE) L))
- ; (T (POISMERGE A AE L)))))
-
- ; (DEFUN POISMERGESY (A AE L)
- ; (SETQ SLC
- ; (COND ((EQUAL POISHIFT AE) L)
- ; ((POISNEGPRED AE) (POISMERGESY1 (POISCO* POISCOM1 A) (POISCHANGESIGN AE) L))
- ; (T (POISMERGESY1 A AE L)))))
-
- ; (DEFUN POISMERGECY (A AE L)
- ; (SETQ CLC (COND ((POISNEGPRED AE) (POISMERGECY1 A (POISCHANGESIGN AE) L))
- ; (T (POISMERGECY1 A AE L)))))
-
- ; (DEFUN POISMERGECY1 (A AE L)
- ; (COND ((POISPZERO A) NIL)
- ; ((OR (NULL CLCPTR) (LESSP AE (CAR CLCPTR)))
- ; (SETQ CLC (POISMERGE2K (LIST AE A) L)) (SETQ CLCPTR LASTPTR))
- ; (T (POISMERGE2K (LIST AE A) CLCPTR) (SETQ CLCPTR LASTPTR)))
- ; CLC)
-
- ; (DEFUN POISMERGESY1 (A AE L)
- ; (COND ((POISPZERO A) NIL)
- ; ((OR (NULL SLCPTR) (LESSP AE (CAR SLCPTR)))
- ; (SETQ SLC (POISMERGE2K (LIST AE A) L)) (SETQ SLCPTR LASTPTR))
- ; (T (POISMERGE2K (LIST AE A) SLCPTR) (SETQ SLCPTR LASTPTR)))
- ; SLC)
-
- ; (DEFMFUN $POISTIMESL (A B)
- ; (PROG (SLC SLCPTR CLC CLCPTR TEMP AE AA TRIM T1 T2 F1 F2 LASTPTR SLCX CLCX)
- ; (SETQ A (INTOPOIS A) B (INTOPOIS B))
- ; (COND ((OR (GETL '$POISTRIM '(EXPR SUBR)) (MGET '$POISTRIM 'MEXPR)) (SETQ TRIM T)))
- ; (COND ((NONPERIOD A) (RETURN ($POISCTIMES (CADR (CADDR A)) B)))
- ; ((NONPERIOD B) (RETURN ($POISCTIMES (CADR (CADDR B)) A))))
- ; (SETQ SLCPTR SLC CLCPTR CLC CLCX NIL SLCX NIL)
- ; (DO SLA (CADR A) (CDDR SLA) (NULL SLA)
- ; (SETQ AA (HALVE (CADR SLA)) AE (CAR SLA))
- ; (DO SLB (CADR B) (CDDR SLB) (NULL SLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR SLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR SLB)))
- ; (COND ((AND TRIM (SETQ F1 (TRIMF T1)) (SETQ F2 (TRIMF T2))) (SETQ F1 NIL F2 NIL))
- ; (T (SETQ TEMP (POISCO* AA (CADR SLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGECQ TEMP T1 CLCX))
- ; (OR F2 (POISMERGECY (POISCO* POISCOM1 TEMP) T2 CLC)))))))
- ; (DO CLB (CADDR B) (CDDR CLB) (NULL CLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR CLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR CLB)))
- ; (COND ((AND TRIM (SETQ F1 (TRIMF T1)) (SETQ F2 (TRIMF T2))) (SETQ F1 NIL F2 NIL))
- ; (T (SETQ TEMP (POISCO* AA (CADR CLB)))
- ; (COND ((POISPZERO TEMP) NIL) (T (OR F1 (POISMERGESQ TEMP T1 SLCX))
- ; (OR F2 (POISMERGESY TEMP T2 SLC))))))))
- ; (SETQ CLC (POISMERGE2 CLC CLCX) SLC (POISMERGE2 SLC SLCX))
- ; (SETQ SLCPTR SLC CLCPTR CLC SLCX NIL CLCX NIL)
- ; (DO CLA (CADDR A) (CDDR CLA) (NULL CLA)
- ; (SETQ AA (HALVE (CADR CLA)) AE (CAR CLA))
- ; (DO SLB (CADR B) (CDDR SLB) (NULL SLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR SLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR SLB)))
- ; (COND ((AND TRIM (SETQ F1 (TRIMF T1)) (SETQ F2 (TRIMF T2))) (SETQ F1 NIL F2 NIL))
- ; (T (SETQ TEMP (POISCO* AA (CADR SLB)))
- ; (COND ((POISPZERO TEMP) NIL)
- ; (T (OR F1 (POISMERGESQ (POISCO* POISCOM1 TEMP) T1 SLCX))
- ; (OR F2 (POISMERGESY TEMP T2 SLC)))))))
- ; (DO CLB (CADDR B) (CDDR CLB) (NULL CLB)
- ; (SETQ T1 (PLUS AE POISHIFT (MINUS (CAR CLB)))
- ; T2 (PLUS AE (MINUS POISHIFT) (CAR CLB)))
- ; (COND ((AND TRIM (SETQ F1 (TRIMF T1)) (SETQ F2 (TRIMF T2))) (SETQ F1 NIL F2 NIL))
- ; (T (SETQ TEMP (POISCO* AA (CADR CLB)))
- ; (COND ((POISPZERO TEMP) NIL) (T (OR F1 (POISMERGECQ TEMP T1 CLCX))
- ; (OR F2 (POISMERGECY TEMP T2 CLC))))))))
- ; (SETQ CLC (POISMERGE2 CLC CLCX) SLC (POISMERGE2 SLC SLCX))
- ; (RETURN (LIST '(MPOIS SIMP) SLC CLC))))
-
- ;) ;End of commented out code
-
-